define(["SzLib", "SzSns", "jquery", "jquery.json"], function(SzLib, SzSns) {

    /**
     * Facebook implementation of SzSns.
     */
    var SzSnsSina = function() {
        // Call the parent constructor
        SzSns.call(this);
    };
    // inherit SzSns
    SzSnsSina.prototype = new SzSns();
    // correct the constructor pointer because it points to SzSns
    SzSnsSina.prototype.constructor = SzSnsSina;


    //-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
    //-* API Function Overwrites
    //-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
    /**
     * 获取玩家信息
     *
     * @see SzSns.prototype.getUserInfo
     */
    SzSnsSina.prototype.getUserInfo = function(platformId, callback) {
        return SzLib.sendSzReq(
            ["platform.getUserInfo", [platformId]],
            function(r) {
                var userInfo = {
                    id: platformId,
                    name: r.name,
                    gender: r.gender,
                    locale: r.location,
                    profile_image_url: r.profile_image_url,
                    timezone: '',
                    email: '',
                    first_name: '',
                    last_name: ''
                };
                SZ.APP.callAsFunc("setUserInfo", userInfo);
                if (typeof callback == 'function') {
                    callback(userInfo);
                }
                return userInfo;
            },
            function(data) {
                SzLib.log(data); // failure
            },
            {
                "token": SZ.TOKEN,
                "dev": SzLib.getUrlParam('dev'),
                'wyx_session_key': SZ.PF_TOKEN,
                'wyx_signature': SZ.PF_SIGNATURE
            },
            SZ.IS_COMPRESS
        );
    };

    /**
     * 获取复数玩家信息
     *
     * @see SzSns.prototype.getUserInfos
     */
    SzSnsSina.prototype.getUserInfos = function(platformIds, callback) {
        return SzLib.sendSzReq(
            ["platform.getUserInfos", [platformIds]],
            function(r) {
                var userInfos = {};
                if (typeof r === 'object') {
                    $.each(r, function(platformId, friendInfo) {
                        if (platformId != SZ.PLATFORM_ID) {
                            userInfos[platformId] = {
                                id: friendInfo.id,
                                name: friendInfo.name,
                                profile_image_url: friendInfo.profile_image_url
                            };
                        }
                    });
                }
                SZ.APP.callAsFunc("setUserInfos", userInfos);
                if (typeof callback == 'function') {
                    callback(userInfos);
                }
                return userInfos;
            },
            function(data) {
                SzLib.log(data); // failure
            },
            {
                "token": SZ.TOKEN,
                "dev": SzLib.getUrlParam('dev'),
                'wyx_session_key': SZ.PF_TOKEN,
                'wyx_signature': SZ.PF_SIGNATURE
            },
            SZ.IS_COMPRESS
        );
    };

    /**
     * 获取好友列表信息
     *
     * @see SzSns.prototype.getFriends
     */
    SzSnsSina.prototype.getFriends = function(platformId, callback) {
        return SzLib.sendSzReq(
            ["platform.getFriends", [platformId]],
            function(r) {
                var userInfos = {};
                if (typeof r === 'object') {
                    $.each(r, function(key, friendInfo) {
                        if (friendInfo.id != SZ.PLATFORM_ID) {
                            userInfos[friendInfo.id] = {
                                id: friendInfo.id,
                                name: friendInfo.name,
                                profile_image_url: friendInfo.profile_image_url
                            };
                        }
                    });
                }
                SZ.APP.callAsFunc("setFriendList", userInfos);
                if (typeof callback == 'function') {
                    callback(userInfos);
                }
                return userInfos;
            },
            function(data) {
                SzLib.log(data); // failure
            },
            {
                "token": SZ.TOKEN,
                "dev": SzLib.getUrlParam('dev'),
                'wyx_session_key': SZ.PF_TOKEN,
                'wyx_signature': SZ.PF_SIGNATURE
            },
            SZ.IS_COMPRESS
        );
    };

    /**
     * 获取玩家access token的接口
     *
     * @see SzSns.prototype.getAccessToken
     */
    SzSnsSina.prototype.getAccessToken = function() {
        return null;
    };

    /**
     * 获取玩家本地化支付，现金单位与汇率的接口
     *
     * @see SzSns.prototype.getCurrency
     */
    SzSnsSina.prototype.getCurrency = function(params, callback) {
        var r = {
            currency : {
                usd_exchange_inverse: 1, // 新浪的汇率并非真实的CNY，实际都按USD来计算
                user_currency: 'CNY'
            }
        };
        SZ.APP.callAsFunc("setCurrency", r);
        callback(params, r);
    };

    /**
     * 服务器生成好feedId和link后，前端调用sendFeed接口，当真正发布feed后，在回调函数中调用as接口，
     * 前端记录已发送feed的类型，并调用后端接口，将feedId传给服务器，服务器更新feedId对应的状态
     *
     * @see SzSns.prototype.sendFeed
     * @param feedId
     * @param feedDefId
     * @param feedInfo
     * @param platformId
     * <pre>
     *    ｛
     *          name:[param, param, ...],
     *          caption:[param, param, ...],
     *          description:[param, param, ...],
     *     ｝
     * </pre>
     */
    SzSnsSina.prototype.sendFeed = function(feedId, feedDefId, feedInfo, platformId) {
        var feedUrl = SZ.CANVAS_URL + '/?feedId=' + feedId + '&platformId=' + platformId+ '&act=feed&fb_source=feed';

        // 防止文字超框
        var feedName = SzLib.strReplace(SZ.FEED_JSON[feedDefId].title, feedInfo.name);
        if (feedName.length > 50) {
            feedName = feedName.substring(0, 45) + '...';
        }

        $("#gameSwf").addClass("hideSwf");
        $("#gameImage")
            .html('<img src="data:image/jpeg;base64,' + SZ.APP.callAsFunc("getStageImage", []) + '" width="100%">')
            .show();

        // 内容不能超过 140 字
        var content =  SzLib.strReplace(SZ.FEED_JSON[feedDefId].description, feedInfo.description);
        if (content.length > (140 - feedUrl.length)) {
            content = content.substr(0, (140 - feedUrl.length));
        }
        content += feedUrl;
        SzLib.log("content:" + content);

        var imageUrl = 'http://' + SZ.IMG_URL + SZ.LANG + '/feed/' + SZ.FEED_JSON[feedDefId].picture; // feed picture
        SzLib.sendSzReq(
            ["platform.sendWeibo",[SZ.PLATFORM_ID, content, imageUrl]],
            function(res) {
                $("#gameSwf").removeClass("hideSwf");
                $("#gameImage").html("").hide();
                SZ.APP.callAsFunc("sendFeedCallBack", res);
                SzLib.log(res);
            },
            function(res) {
                $("#gameSwf").removeClass("hideSwf");
                $("#gameImage").html("").hide();
                SzLib.log(res);
            },
            {
                "token": SZ.TOKEN,
                "dev": SzLib.getUrlParam('dev'),
                'wyx_session_key': SZ.PF_TOKEN,
                'wyx_signature': SZ.PF_SIGNATURE
            },
            SZ.IS_COMPRESS
        );


        // var obj = {
        //     method:'sendWeibo',
        //     params:{
        //         appId:SZ.APP_ID,
        //         title            : feedName,
        //         content          : SzLib.strReplace(SZ.FEED_JSON[feedDefId].description, feedInfo.description), // feed description 新鲜事内容描述
        //         actionText      : "快速开始",
        //         templateContent: SzLib.strReplace(SZ.FEED_JSON[feedDefId].caption, feedInfo.caption), // feed title
        //         link             : feedUrl,
        //         actionUrl       : feedUrl,
        //         imageUrl        : 'http://' + SZ.IMG_URL + SZ.LANG + '/feed/' + SZ.FEED_JSON[feedDefId].picture // feed picture
        //     }
        // };
        //
        // WYX.Connect.send(obj,function(data){
        //     //callBack function
        //     $("#gameSwf").removeClass("hideSwf");
        //     $("#gameImage").html("").hide();
        //     SZ.APP.callAsFunc("sendFeedCallBack", [data]);
        //     SzLib.log(data);
        // });



    };

    /**
     * 前端调用sendRequest接口，当真正发送request后，在回调函数中调用as接口，
     * 前端记录已发送request的类型和已发送的userId，并调用后端接口，
     * 后端根据userId创建request数据
     *
     * @see SzSns.prototype.sendRequest
     * @param userIds
     * @param requestDefId
     * @param requestInfo
     * <pre>
     *    ｛
     *          title:[param, param, ...],
     *          message:[param, param, ...],
     *     ｝
     * </pre>
     */
    SzSnsSina.prototype.sendRequest = function(userIds, requestDefId, requestInfo) {
        this.getUserInfos(userIds, function(userInfos) {
            var feedUrl = SZ.CANVAS_URL + '&fb_source=request';

            var inviteFriendsStr = '';
            $.each(userInfos, function(platformId, userInfo) {
                inviteFriendsStr += '@' + userInfo.name + ' ';
            });

            // 防止文字超框
            var feedName = '鲜花小镇邀请函!';
            if (inviteFriendsStr.length > 140) {
                inviteFriendsStr = inviteFriendsStr.substring(0, 140);
            }

            $("#gameSwf").addClass("hideSwf");
            $("#gameImage")
                .html('<img src="data:image/jpeg;base64,' + SZ.APP.callAsFunc("getStageImage", []) + '" width="100%">')
                .show();
            // 内容不能超过 140 字
            var content = "快来和我一起玩鲜花小镇吧" + inviteFriendsStr;
            if (content.length > (140 - feedUrl.length)) {
                content = content.substr(0, (140 - feedUrl.length));
            }
            content += feedUrl;
            
            SzLib.log("content:" + content);
            var imageUrl ='http://' + SZ.IMG_URL + SZ.LANG + '/feed/defaultFeed.png'; // feed picture
            // var obj = {
            //     method:'sendWeibo',
            //     params:{
            //         appId            : SZ.APP_ID,
            //         title            : feedName,
            //         content          : "快来和我一起玩鲜花小镇吧",
            //         actionText       : "快速开始",
            //         templateContent  : inviteFriendsStr,
            //         link             : feedUrl,
            //         actionUrl        : feedUrl,
            //         imageUrl         : 'http://' + SZ.IMG_URL + SZ.LANG + '/feed/defaultFeed.png' // feed picture
            //     }
            // };
            //
            // WYX.Connect.send(obj, function(res) {
            //     //callBack function
            //     $("#gameSwf").removeClass("hideSwf");
            //     $("#gameImage").html("").hide();
            //     SZ.APP.callAsFunc("sendRequestCallBack", [res]);
            //     SzLib.log(res);
            // });

            SzLib.sendSzReq(
                ["platform.sendWeibo",[SZ.PLATFORM_ID, content, imageUrl]],
                function(res) {
                    $("#gameSwf").removeClass("hideSwf");
                    $("#gameImage").html("").hide();
                    SZ.APP.callAsFunc("sendRequestCallBack", [res]);
                    SzLib.log(res);
                },
                function(res) {
                    $("#gameSwf").removeClass("hideSwf");
                    $("#gameImage").html("").hide();
                    SzLib.log(res);
                },
                {
                    "token": SZ.TOKEN,
                    "dev": SzLib.getUrlParam('dev'),
                    'wyx_session_key': SZ.PF_TOKEN,
                    'wyx_signature': SZ.PF_SIGNATURE
                },
                SZ.IS_COMPRESS
            );

        });
    };

    /**
     * 发送sendOpenGraph接口，
     *
     * @see SzSns.prototype.sendOpenGraph
     * @param actionType // e.g: harvest
     * @param objectType // e.g: flower
     * @param graphInfo // json string e.g: [[title,...], [description,...]], 具体需要参考openGraph的文档进行设置，默认为空“[[],[]]”
     */
    SzSnsSina.prototype.sendOpenGraph = function(actionType, objectType, graphInfo) {
        // 无
    };

    /**
     * @see SzSns.prototype.orderPayment
     */
    SzSnsSina.prototype.orderPayment = function(paymentDefId, extra, type) {
        window.open('http://zhifu.game.weibo.com/pgame.php?gid=18001288&srv=180012881001');
        this.waitPaymentSucceed(SZ.USER_ID, 0);
    };

    /**
     * 等待支付成功消息返回
     *
     * @returns void
     */
    SzSnsSina.prototype.waitPaymentSucceed = function(userId, count) {
        SzLib.sendSzReq(
            ["payment.waitPaymentSucceed", [userId]],
            function(r) {
                SZ.APP.paymentSucceed(r);
            },
            function(r) {
                SzLib.log('waitPaymentSucceed loop count:' + count);
                if (count < 6 * 10) { // 10分钟内不付费，不再监控订单状态
                    setTimeout(function() {
                        SZ.SNS.waitPaymentSucceed(userId, count + 1);
                    }, 10000);
                }
            },
            {
                "token": SZ.TOKEN,
                "dev": SzLib.getUrlParam('dev')
            },
            SZ.IS_COMPRESS
        );
    };

    /**
     * 打开邀请好友界面
     *
     * @returns void
     */
    SzSnsSina.prototype.inviteBox = function() {
        SzLib.log('sina invite box');
        SZ.APP.callAsFunc("closeJsPanel", []);
        SZ.APP.callAsFunc("openInviteNeighborsPanel", []);
    };

    return new SzSnsSina();

});